package com.community.process._1010.common.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @Description: 金额单位转换
 * 1.系统金额单位,元后4个百分点
 * 2.系统金额单位,分后2个百分点
 * 3.金额单位转换
 * 看清楚！！！别用错方法了！！
 * @Author: Administrator to Zbs
 * @Date: 2024/8/1 星期四 14:32
 */
public class SystemAmountUtil {

    /**
     * 系统金额单位,元后4个百分点
     */
    private final static Long yuanAmountUnit = 10000L;

    /**
     * 系统金额单位,分后2个百分点
     */
    private final static Long pennyAmountUnit = 100L;

    /**
     * 系统金额单位转元
     * @param sysAmount 系统金额，单位(元*10000)
     * @return 元
     */
    public static BigDecimal sysAmountUnitToYuan(Long sysAmount) {
        if (sysAmount == null) return null;
        return new BigDecimal(String.valueOf(sysAmount)).divide(new BigDecimal(yuanAmountUnit), 2, RoundingMode.HALF_UP);
    }

    /**
     * 金额单位转换 元转系统单位
     * @param yuan 金额 单位 元
     * @return 金额 单位 系统单位(元*10000)
     */
    public static Long yuanToSysAmountUnit(BigDecimal yuan) {
        if (yuan == null) return null;
        return yuan.multiply(new BigDecimal(yuanAmountUnit)).longValue();
    }

    /**
     * 金额单位转换 元转系统单位
     * @param yuan 金额 单位 元
     * @return 金额 单位 系统单位(元*10000)
     */
    public static Long yuanToSysAmountUnit(Double yuan) {
        if (yuan == null) return null;
        return new BigDecimal(String.valueOf(yuan)).multiply(new BigDecimal(yuanAmountUnit)).longValue();
    }

    /**
     * 金额单位转换 分转系统单位
     * @param penny 金额 单位 分
     * @return 金额 单位 系统单位(元*10000)
     */
    public static Long pennyToSysAmountUnit(Long penny) {
        if (penny == null) return null;
        return new BigDecimal(String.valueOf(penny)).multiply(new BigDecimal(pennyAmountUnit)).longValue();
    }

    /**
     * 系统金额单位转元
     * @param sysAmount 系统金额，单位(元*10000)
     * @return 分
     */
    public static Long sysAmountUnitToPenny(Long sysAmount) {
        if (sysAmount == null) return null;
        return new BigDecimal(String.valueOf(sysAmount)).divide(new BigDecimal(pennyAmountUnit), 2, RoundingMode.HALF_UP).longValue();
    }

    /**
     * 金额单位转换 分转元
     * @param penny 分
     * @return 元
     */
    public static BigDecimal pennyToYuan(Long penny) {
        if (penny == null) return null;
        return new BigDecimal(String.valueOf(penny)).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
    }

    /**
     * 金额单位转换 元转分
     * @param yuan 金额 单位 元
     * @return 金额 单位 分
     */
    public static Long yuanToPenny(BigDecimal yuan) {
        if (yuan == null) return null;
        return yuan.multiply(new BigDecimal("100")).longValue();
    }

}
